package com.cddx.logistics.controller;

import com.cddx.logistics.domain.dto.StorageLocationQueryDTO;
import com.cddx.logistics.domain.pojo.StorageLocation;
import com.cddx.logistics.domain.vo.HStorageLocationVO;
import com.cddx.logistics.domain.vo.StorageLocationVO;
import com.cddx.logistics.domain.vo.HStorageLocationVO;
import com.cddx.logistics.domain.vo.MaterialVO;
import com.cddx.logistics.service.StorageLocationService;
import com.cddx.logistics.util.model.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;

@RestController
@Api(tags = "库位管理控制器")
@RequestMapping("/storageLocation")
public class StorageLocationController {
    @Resource
    private StorageLocationService storageLocationService;

    /**
     * 获取库位列表
     */

    /**
     * 获取库位列表
     */
    @PostMapping("/list")
    @ApiModelProperty("获取库位列表")
    public R queryList(@RequestBody StorageLocationQueryDTO storageLocationQueryDTO) {
        List<HStorageLocationVO> list = storageLocationService.queryList(storageLocationQueryDTO);
        return R.ok(list);
    }

    // 添加库位
    @PostMapping("/add")
    public R createLocation(@RequestBody StorageLocation dto) {
        return storageLocationService.add(dto) ? R.ok("添加成功") : R.error("添加失败");
    }

    // 编辑库位
    @PostMapping("/update")
    public R updateLocation(@RequestBody  StorageLocation dto) {
        return storageLocationService.update(dto) ? R.ok("修改成功") : R.error("修改失败");
    }

    /**
     * 删除库位
     */
    @GetMapping("delete")
    public R delete(@RequestParam Integer id) {
        StorageLocation location = storageLocationService.getById(id);
        if (location.getStorageLocationUsedCapacity().compareTo(BigDecimal.ZERO) > 0) {
            return R.error("库存不为空，无法删除");
        }
        return storageLocationService.delete(id) ? R.ok("删除成功") : R.error("删除失败");
    }

    /**
     * 获取库位详情
     * @param id
     * @return
     */
    @GetMapping("/materials/{id}")
    public R getMaterials(@PathVariable("id") Integer id) {
        List<MaterialVO> list = storageLocationService.getMaterialsByLocationId(id);
        return R.ok(list);
    }

    /**
     *回显
     */
    @GetMapping("/detail/{id}")
    public R detail(@PathVariable Integer id) {
        System.out.println("接收到的 ID: " + id);
        StorageLocation location = storageLocationService.getById(id);
        return R.ok(location);
    }


}
